import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '../../../common/routers/names.dart';
import '../../../common/mixins/user_profile_mixin.dart';
import '../../../common/utils/index.dart';
import '../../../common/services/index.dart';

class HomeIndexController extends GetxController with UserProfileMixin {
  static const String tag = 'HomeIndexController';
  
  // 退出登录相关常量
  static const Duration logoutTimeout = Duration(seconds: 10);
  
  // 时间相关
  var currentTime = DateTime.now().obs;
  Timer? _timer;
  
  // 退出登录状态
  var isLoggingOut = false.obs;
  
  // 获取格式化的日期 (例如: 2024年10月17日)
  String get formattedDate {
    final date = currentTime.value;
    return '${date.year}年${date.month.toString().padLeft(2, '0')}月${date.day.toString().padLeft(2, '0')}日';
  }
  
  // 获取星期几
  String get weekDay {
    const weekDays = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'];
    return weekDays[currentTime.value.weekday - 1];
  }
  
  // 获取格式化的时间 (例如: 14:30:25)
  String get formattedTime {
    final time = currentTime.value;
    return '${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}:${time.second.toString().padLeft(2, '0')}';
  }
  
  // 获取时间段 (上午/下午/晚上)
  String get timePeriod {
    final hour = currentTime.value.hour;
    if (hour >= 0 && hour < 6) {
      return '凌晨';
    } else if (hour >= 6 && hour < 12) {
      return '上午';
    } else if (hour >= 12 && hour < 13) {
      return '中午';
    } else if (hour >= 13 && hour < 18) {
      return '下午';
    } else {
      return '晚上';
    }
  }
  
  // 获取时间段问候语
  String get greeting {
    final hour = currentTime.value.hour;
    if (hour >= 0 && hour < 6) {
      return '夜深了，注意休息';
    } else if (hour >= 6 && hour < 9) {
      return '早上好';
    } else if (hour >= 9 && hour < 12) {
      return '上午好';
    } else if (hour >= 12 && hour < 14) {
      return '中午好';
    } else if (hour >= 14 && hour < 18) {
      return '下午好';
    } else {
      return '晚上好';
    }
  }
  
  // 评审模块数据
  final evaluationModules = [
    {
      'title': '项目申报评审',
      'subtitle': '新项目申报材料审核与评估',
      'icon': Icons.assignment_outlined,
      'color': const Color(0xFF1565C0), // 深蓝色
      'count': 8,
      'status': 'active',
      'route': RouteNames.assessmentShenbao,
      'params': {'type': 'declaration', 'title': '项目申报评审'},
    },
    {
      'title': '项目采购评审', 
      'subtitle': '采购方案与供应商资质评审',
      'icon': Icons.shopping_cart_outlined,
      'color': const Color(0xFF2E7D32), // 深绿色
      'count': 12,
      'status': 'active',
      'route': RouteNames.assessmentCaigou,
      'params': {'type': 'procurement', 'title': '项目采购评审'},
    },
    {
      'title': '项目验收评审',
      'subtitle': '项目完成质量与成果验收',
      'icon': Icons.verified_outlined,
      'color': const Color(0xFF7B1FA2), // 深紫色  
      'count': 5,
      'status': 'active',
      'route': RouteNames.assessmentYanshou,
      'params': {'type': 'acceptance', 'title': '项目验收评审'},
    },
  ].obs;
  
  // 页面状态
  var isLoading = false.obs;

  HomeIndexController();

  // 服务依赖
  UserService get _userService => Get.find<UserService>();
  
  /// 跳转到"我的"页面
  void goToMyProfile() {
    debugPrint('$tag: 跳转到我的页面');
    Get.toNamed(RouteNames.myMyIndex);
  }
  
  // ==================== 退出登录相关方法 ====================
  
  /// 退出登录
  void onLogoutTap() async {
    try {
      debugPrint('$tag: 用户点击退出登录');
      
      // 显示确认对话框
      final result = await _showLogoutConfirmDialog();
      
      // 用户确认退出
      if (result == true) {
        await _performLogout();
      } else {
        debugPrint('$tag: 用户取消退出登录');
      }
      
    } catch (e) {
      debugPrint('$tag: 退出登录异常: $e');
      LoadingUtil.error('退出登录时发生错误，请重试');
    }
  }
  
  /// 显示退出确认对话框
  Future<bool?> _showLogoutConfirmDialog() async {
    return await Get.dialog<bool>(
      AlertDialog(
        title: const Text('确认退出'),
        content: const Text('您确定要退出登录吗？'),
        actions: [
          TextButton(
            onPressed: () => Get.back(result: false),
            child: const Text('取消'),
          ),
          TextButton(
            onPressed: () => Get.back(result: true),
            child: const Text(
              '退出',
              style: TextStyle(color: Colors.red),
            ),
          ),
        ],
      ),
    );
  }
  
  /// 执行退出登录
  Future<void> _performLogout() async {
    try {
      isLoggingOut.value = true;
      
      debugPrint('$tag: 开始执行退出登录流程');
      
      // 调用用户服务退出登录（带超时控制）
      final success = await _userService.logout().timeout(
        logoutTimeout,
        onTimeout: () {
          debugPrint('$tag: 退出登录超时');
          return false;
        },
      );
      
      if (success) {
        debugPrint('$tag: 退出登录成功');
        
        // 显示成功提示
        LoadingUtil.success('已成功退出登录');
        
        // 短暂延迟让用户看到成功提示，然后跳转到登录页面
        await Future.delayed(const Duration(milliseconds: 800));
        
        // 跳转到登录页面
        _navigateToLogin();
        
      } else {
        debugPrint('$tag: 退出登录失败');
        LoadingUtil.error('退出登录失败，请重试');
      }
      
    } catch (e) {
      debugPrint('$tag: 执行退出登录异常: $e');
      LoadingUtil.error('退出登录时发生错误');  
    } finally {
      isLoggingOut.value = false;
    }
  }
  
  /// 退出登录后跳转到登录页面
  void _navigateToLogin() {
    debugPrint('$tag: 🚀 退出登录，跳转到登录页面');
    
    try {
      // 清除所有路由历史，跳转到登录页面
      Get.offAllNamed(RouteNames.systemLogin);
      
      debugPrint('$tag: ✅ 退出登录完成，已跳转到登录页面');
      
    } catch (e) {
      debugPrint('$tag: ❌ 跳转失败: $e');
      LoadingUtil.error('页面切换异常，请重新打开应用');
    }
  }

  _initData() {
    debugPrint('$tag: 初始化首页数据');
    
    // 启动定时器，每秒更新时间
    _startTimer();
    
    update(["home_index"]);
  }
  
  /// 启动定时器，每秒更新时间
  void _startTimer() {
    _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      currentTime.value = DateTime.now();
    });
    debugPrint('$tag: 时间定时器已启动');
  }
  
  /// 停止定时器
  void _stopTimer() {
    _timer?.cancel();
    _timer = null;
    debugPrint('$tag: 时间定时器已停止');
  }

  /// 跳转到评审详情页面
  void goToEvaluationDetail(Map<String, dynamic> module) {
    debugPrint('$tag: 跳转到${module['title']}');
    
    try {
      final route = module['route'] as String;
      final params = module['params'] as Map<String, dynamic>;
      
      // 使用Get.toNamed进行页面跳转，遵循路由标准化
      Get.toNamed(route, arguments: {
        'evaluationType': params['type'],
        'pageTitle': params['title'],
        'moduleData': module,
        'fromPage': 'home_index',
        'timestamp': DateTime.now().millisecondsSinceEpoch,
      });
      
      debugPrint('$tag: 成功跳转到${module['title']}页面');
      
    } catch (e) {
      debugPrint('$tag: 页面跳转失败: $e');
      LoadingUtil.error('页面暂时无法访问，请稍后重试');
    }
  }

  /// 刷新页面数据
  void refreshData() async {
    debugPrint('$tag: 刷新首页数据');
    
    try {
      isLoading.value = true;
      update(["home_index"]);
      
      // 模拟数据加载
      await Future.delayed(const Duration(seconds: 1));
      
      debugPrint('$tag: 数据刷新完成');
      
    } catch (e) {
      debugPrint('$tag: 数据刷新失败: $e');
      LoadingUtil.error('数据加载失败，请稍后重试');
    } finally {
      isLoading.value = false;
      update(["home_index"]);
    }
  }

  void onTap() {
    debugPrint('$tag: 通用点击事件');
  }

  @override
  void onReady() {
    super.onReady();
    _initData();
  }

  @override
  void onClose() {
    debugPrint('$tag: onClose');
    _stopTimer();
    super.onClose();
  }
}
